package com.math.aistudykbr.config;

import io.micrometer.observation.ObservationRegistry;
import lombok.Data;
import org.springframework.ai.model.tool.DefaultToolCallingManager;
import org.springframework.ai.model.tool.ToolCallingManager;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.support.RetryTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

@Configuration
@Data
public class AiConfig {

//    @Value("${spring.ai.openai.api-key}")
    @Value("${spring.ai.openai.api-key}")
    private String OPENAI_API_KEY;

    @Value("${spring.ai.openai.chat.options.model}")
    private String OPENAI_MODEL;

    @Value("${spring.ai.openai.base-url}")
    private String BASE_URL;

    @Bean(name = "analysisTaskExecutor")
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setMaxPoolSize(8);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("AnalysisTask-");
        return executor;
    }
//
//    @Bean
//    public OpenAiApi openAiApi() {
////        OpenAiChatOptions options = OpenAiChatOptions.builder().model(OPENAI_MODEL).temperature(0.7).build();
//        return new OpenAiApi.Builder()
//                .apiKey(OPENAI_API_KEY)
//                .baseUrl(BASE_URL)
//                .build();
//    }
//
//    @Bean(name = "OpenAiChatOptions")
//    public OpenAiChatOptions openAiChatOptions() {
//        return OpenAiChatOptions.builder().model(OPENAI_MODEL).temperature(0.7).build();
//    }
//
//    @Bean
//    public RetryTemplate retryTemplate() {
//        return RetryTemplate.builder()
//                .maxAttempts(3) // 最大重试次数
//                .fixedBackoff(1000) // 重试间隔 1秒
//                .build();
//    }
//
//    // 5. ObservationRegistry (必须)
//    @Bean
//    public ObservationRegistry observationRegistry() {
//        return ObservationRegistry.create(); // 默认监控注册表
//    }
//
//    @Bean(name =  "OpenAiChatModel")
//    public OpenAiChatModel openAiChatModel() {
//        return new OpenAiChatModel(openAiApi(), openAiChatOptions(), retryTemplate(), observationRegistry());
//    }
}
